// 导入了路由
import router, { asyncRoutes } from './router'
import store from './store'
// import { Message } from 'element-ui'
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式
// import { getToken } from '@/utils/auth' // get token from cookie
// import getPageTitle from '@/utils/get-page-title'

// NProgress.configure({ showSpinner: false }) // NProgress Configuration

// 白名单
const whiteList = ['/login', '/404'] // 定义白名单  所有不受权限控制的页面

// 前门保安
router.beforeEach(async (to, from, next) => {
  // 开启进度条
  // NProgress.start()

  // 判断有没有token
  if (store.getters.token) {
    if (to.path === '/login') {
      next('/')
    } else {
      // 有了用户数据之后再完成正式的页面跳转
      next()
      // 判断如果没有获取用户信息才进行调用
      if (!store.getters.name) {
        const perms = await store.dispatch('user/getUserInfo')
        // 上一步获取登录人的基本信息（其中包含权限点的标识数据）
        /*
         需求:根据获取的权限点的标识数据过滤动态路由=》用户只能访问指定的页面
         1.获取权限点标识
         2.根据登录人的权限标识数据过滤动态路由
        */
        const canLook = asyncRoutes.filter(route => {
          // mens 中如果包含当前 route中的 name 就留下
          return perms.roles.menus.includes(route.children[0].name)
        })
        // 存储菜单数据
        store.commit('menus/setMenuList', canLook)
        console.log('当前登陆人权限点信息：', perms.roles, canLook)
        // 动态添加路由配置
        router.addRoutes([...canLook, { path: '*', redirect: '/404', hidden: true }])
      }
      console.log('再完成页面跳转')
    }
  } else {
    // 如果没有token
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next(`/login?redirect=${to.path}`)
    }
  }
})

// 后门保安
router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})
